package tests;

import common.Untils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import javax.swing.plaf.basic.BasicViewportUI;
import java.time.Duration;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: ASUS
 * Date: 2025-04-17
 * Time: 10:54
 */
public class ListPage extends Untils {
    private static String url = "http://127.0.0.1:8080/login.html";

    public ListPage() {

        super(url);
    }

    /*
    未登录状态下 --- 访问列表页
    由 PageByNoLogin类 进行测试
     */

    /*
    登录状态下 --- 访问主页面
     */
    public static String username = null;
    public static String se1 = null;
    public static String se2 = null;
    public void ListLogin() throws InterruptedException {
//        Thread.sleep(1000);
        // 重新返回并清空登录页面进行登录
        driver.navigate().refresh();

        // 登录
        driver.findElement(By.cssSelector("#username")).sendKeys("lisi");
        username = driver.findElement(By.cssSelector("#username")).getText();
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        // 为了能等到弹窗出现，加一个等待
        Thread.sleep(1000);
        // 有弹窗先解决弹窗
        Alert alert = driver.switchTo().alert();
        alert.accept();

        // 通过查看页面元素是否存在来检查页面加载成功与否
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session"));
        se1 =driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session")).getText();

    }

    /*
    检查个人信息是否正确
     */
    public void PersonalInformation() {
        // 找到登录用户名
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user"));
        // 用断言来比较这个用户名和登录的用户名是否一致
        assert se1.equals(username);
    }

    /*
    检查搜索框
     */
    public void SearchBox() throws InterruptedException {
        // 检查是否可以正常输入
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.search > input[type=text]")).sendKeys("zhangsan");
        // 点击搜索按钮
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.search > button"));
        // 这里按钮虽然可以点击，但是做不到搜索功能

    }

    /*
     检查聊天内容预览
     因为这个消息是动态的，所以只能测试一次，一次过后就要改 test2
        */
    public void ChatPage() throws InterruptedException {
        // 程序执行过快，网站内容还没渲染完全，加一个显式等待
        WebDriverWait off = new WebDriverWait(driver, Duration.ofSeconds(20));
        off.until(ExpectedConditions.textToBe (By.cssSelector("#session-list > li:nth-child(2) > h3"),("zhangsan")));
        // 查询到主页预览中的聊天内容
        String test1 = driver.findElement(By.cssSelector("#session-list > li.selected > p")).getText();
        // 点击对应用户并查询到聊天界面中的聊天内容
        driver.findElement(By.cssSelector("#session-list > li:nth-child(2)")).click();
        String test2 = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div:nth-child(14) > div > p")).getText();
        // 使用断言判断预览功能是否成功
        assert test1.equals(test2);

    }

    /*
    给其他用户发送消息
     */
    public void SendMessage() {
        // 程序执行过快，网站内容还没加载完全，加一个显式等待
        WebDriverWait off = new WebDriverWait(driver, Duration.ofSeconds(20));
        off.until(ExpectedConditions.textToBe (By.cssSelector("#session-list > li:nth-child(2) > h3"),("zhangsan")));
        // 选择一个用户并点击进入消息发送界面
        driver.findElement(By.cssSelector("#session-list > li:nth-child(2)")).click();
        // 找到输入框， 并输入想要发送的内容（空）
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea")).sendKeys("");
        // 点击发送按钮，发送消息
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button")).click();
        // 找到输入框， 并输入想要发送的内容（仅文字）
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea")).sendKeys("你好呀！");
        se2 = driver.findElement(By.cssSelector("#session-list > li.selected > p")).getText();
        // 点击发送按钮，发送消息
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button")).click();
        // 找到输入框， 并输入想要发送的内容 （文字 + 其他内容）
//         driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea")).sendKeys("你好呀！35465466654^&%^%$^%$&^*&%^#$%&%*&$^%#^%#^%&^*&^&");
        // 点击发送按钮，发送消息
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button")).click();
    }

    /*
    检查接收消息
     */
    public void ReceiveMessage() throws InterruptedException {
        // 需要登录另一个接收账号来测试
        // 首先回退，刷新重新登录
        driver.navigate().back();
        driver.navigate().refresh();

        // 登录
        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
        username = driver.findElement(By.cssSelector("#username")).getText();
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        // 为了能等到弹窗出现，加一个等待
        Thread.sleep(2000);
        // 有弹窗先解决弹窗
        Alert alert = driver.switchTo().alert();
        alert.accept();

        // 通过查看页面元素是否存在来检查页面加载成功与否
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session"));


        // 进行收发件验证
        // 程序执行过快，网站内容还没加载完全，加一个显式等待
        WebDriverWait off = new WebDriverWait(driver, Duration.ofSeconds(25));
        off.until(ExpectedConditions.textToBe (By.cssSelector("#session-list > li:nth-child(1) > h3"),("zhaoliu")));
        // 找到发件人昵称，点击进去
        driver.findElement(By.cssSelector("#session-list > li:nth-child(3)")).click();
        // 用断言检查发件人发送的内容是否接收到了
        String ele = driver.findElement(By.cssSelector("#session-list > li.selected > p")).getText();
//        System.out.println(ele+"1");
//        System.out.println(se2+"2");
        assert se2.equals(ele);
    }
    /*
    检查好友列表页
     */
    public void FriendsList() {
        // 找到好友图标并点击，通过查看好友列表的好友昵称判断是否成功跳转
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")).click();
        driver.findElement(By.cssSelector("#friend-list > li:nth-child(1) > h4"));
        // 点击好友，跳转到聊天界面
        driver.findElement(By.cssSelector("#friend-list > li:nth-child(1) > h4")).click();
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title"));
    }
}
